package pe.gob.mininter.dirandro.vaadin.panel.util;

import pe.gob.mininter.dirandro.model.Distrito;
import pe.gob.mininter.dirandro.model.GremioCocalero;
import pe.gob.mininter.dirandro.model.Valor;
import pe.gob.mininter.dirandro.service.GremioService;
import pe.gob.mininter.dirandro.service.UbigeoService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.AbstractSelect.Filtering;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

/**
 * 
 * Registrar Gremio cocalero
 * @author Elvis Campos
 * @since 22/11/2014
 *
 */
public class PanelAgregarGremio extends CustomComponent implements ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_2;

	@AutoGenerated
	private Button btnCancelar;

	@AutoGenerated
	private Button btnAgregar;

	@AutoGenerated
	private TextArea txtZonaInfluencia;

	@AutoGenerated
	private ComboBoxLOVS cmbCuenca;

	@AutoGenerated
	private ComboBox cmbUbicacion;

	@AutoGenerated
	private TextArea txtPlataforma;

	@AutoGenerated
	private TextArea txtJunta;

	@AutoGenerated
	private TextField txtNumiembros;

	@AutoGenerated
	private TextArea txtActividad;

	@AutoGenerated
	private TextField txtSiglas;

	@AutoGenerated
	private TextField txtNombre;

	/**
	 * 
	 */
	private static final long serialVersionUID = 368427746268947236L;

	private GremioCocalero gremioCocalero;
	private GremioService gremioService;
	private UbigeoService ubigeoService;
	
	public GremioCocalero getGremioCocalero() {
		return gremioCocalero;
	}

	public void setGremioCocalero(GremioCocalero gremioCocalero) {
		this.gremioCocalero = gremioCocalero;
	}

	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public PanelAgregarGremio() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		gremioService = Injector.obtenerServicio(GremioService.class);
		ubigeoService = Injector.obtenerServicio(UbigeoService.class);
		postConstruct();
		// TODO add user code here
	}

	private void postConstruct(){
	
		gremioCocalero = new GremioCocalero();
		
		cmbCuenca.setCodigoLista(Constante.LISTA.CODIGO.CUENCA);
		cmbCuenca.setInputPrompt("Cuenca");
		
		cmbUbicacion.setInputPrompt("Distrito - Provincia - Departamento");
		cmbUbicacion.setItemCaptionPropertyId("nombreCompleto");
		cmbUbicacion.setContainerDataSource(new BeanItemContainer<Distrito>(Distrito.class,   ubigeoService.obtenerTodos()));
		cmbUbicacion.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		
		btnAgregar.addListener((ClickListener)this);
		btnCancelar.addListener((ClickListener)this);
	}
	
	@Override
	public void buttonClick(ClickEvent event){
		if(event.getButton().equals(btnAgregar)) {
			
			gremioCocalero.setNombre((String)txtNombre.getValue());
			gremioCocalero.setActividad((String)txtActividad.getValue());
			gremioCocalero.setCuenca((Valor)cmbCuenca.getValue());
			gremioCocalero.setDistrito((Distrito)cmbUbicacion.getValue());
			gremioCocalero.setJuntaDirectiva((String)txtJunta.getValue());
			gremioCocalero.setNumMiembros(Integer.parseInt((String)txtNumiembros.getValue()));
			gremioCocalero.setPlataformaLucha((String)txtPlataforma.getValue());
			gremioCocalero.setSiglas((String)txtSiglas.getValue());
			gremioCocalero.setZonaInfluencia((String)txtZonaInfluencia.getValue());
			
			gremioService.crear(gremioCocalero);
			
			AlertDialog alertDialog = new  AlertDialog("Registro de Gremio Cocalero", "Se ha registrado el gremio cocalero correctamente", "Aceptar", "400");
			getApplication().getMainWindow().addWindow(alertDialog);
			
			btnAgregar.setEnabled(false);
			detach();
			getApplication().getMainWindow().removeWindow(getWindow());
			
		}
		if(event.getButton().equals(btnCancelar)) {
			getApplication().getMainWindow().removeWindow(getWindow());
		}
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("500px");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(true);
		mainLayout.setSpacing(true);
		
		// top-level component properties
		setWidth("500px");
		setHeight("-1px");
		
		// txtNombre
		txtNombre = new TextField();
		txtNombre.setCaption("Nombre del Gremio");
		txtNombre.setImmediate(false);
		txtNombre.setWidth("300px");
		txtNombre.setHeight("-1px");
		txtNombre.setRequired(true);
		txtNombre.setInputPrompt("Nombre del Gremio");
		txtNombre.setMaxLength(200);
		mainLayout.addComponent(txtNombre);
		
		// txtSiglas
		txtSiglas = new TextField();
		txtSiglas.setCaption("Siglas");
		txtSiglas.setImmediate(false);
		txtSiglas.setWidth("-1px");
		txtSiglas.setHeight("-1px");
		txtSiglas.setInputPrompt("Siglas");
		txtSiglas.setMaxLength(50);
		mainLayout.addComponent(txtSiglas);
		
		// txtActividad
		txtActividad = new TextArea();
		txtActividad.setCaption("Actividad");
		txtActividad.setImmediate(false);
		txtActividad.setWidth("400px");
		txtActividad.setHeight("-1px");
		txtActividad.setInputPrompt("Actividad");
		txtActividad.setMaxLength(2000);
		mainLayout.addComponent(txtActividad);
		
		// txtNumiembros
		txtNumiembros = new TextField();
		txtNumiembros.setCaption("Número de Miembros");
		txtNumiembros.setImmediate(false);
		txtNumiembros.setWidth("-1px");
		txtNumiembros.setHeight("-1px");
		txtNumiembros.setInputPrompt("Número de Miembros");
		txtNumiembros.setMaxLength(5);
		mainLayout.addComponent(txtNumiembros);
		
		// txtJunta
		txtJunta = new TextArea();
		txtJunta.setCaption("Junta Directiva");
		txtJunta.setImmediate(false);
		txtJunta.setWidth("400px");
		txtJunta.setHeight("50px");
		txtJunta.setInputPrompt("Junta Directiva");
		txtJunta.setMaxLength(500);
		mainLayout.addComponent(txtJunta);
		
		// txtPlataforma
		txtPlataforma = new TextArea();
		txtPlataforma.setCaption("Plataforma de Lucha");
		txtPlataforma.setImmediate(false);
		txtPlataforma.setWidth("400px");
		txtPlataforma.setHeight("-1px");
		txtPlataforma.setInputPrompt("Plataforma de Lucha");
		txtPlataforma.setMaxLength(500);
		mainLayout.addComponent(txtPlataforma);
		
		// cmbUbicacion
		cmbUbicacion = new ComboBox();
		cmbUbicacion.setCaption("Ubicación");
		cmbUbicacion.setImmediate(false);
		cmbUbicacion.setWidth("-1px");
		cmbUbicacion.setHeight("-1px");
		mainLayout.addComponent(cmbUbicacion);
		
		// cmbCuenca
		cmbCuenca = new ComboBoxLOVS();
		cmbCuenca.setCaption("Cuenca");
		cmbCuenca.setImmediate(false);
		cmbCuenca.setWidth("-1px");
		cmbCuenca.setHeight("-1px");
		mainLayout.addComponent(cmbCuenca);
		
		// txtZonaInfluencia
		txtZonaInfluencia = new TextArea();
		txtZonaInfluencia.setCaption("Zona de Influencia");
		txtZonaInfluencia.setImmediate(false);
		txtZonaInfluencia.setDescription("Zona de Influencia");
		txtZonaInfluencia.setWidth("400px");
		txtZonaInfluencia.setHeight("50px");
		txtZonaInfluencia.setMaxLength(500);
		mainLayout.addComponent(txtZonaInfluencia);
		
		// horizontalLayout_2
		horizontalLayout_2 = buildHorizontalLayout_2();
		mainLayout.addComponent(horizontalLayout_2);
		
		return mainLayout;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_2() {
		// common part: create layout
		horizontalLayout_2 = new HorizontalLayout();
		horizontalLayout_2.setImmediate(false);
		horizontalLayout_2.setWidth("100.0%");
		horizontalLayout_2.setHeight("-1px");
		horizontalLayout_2.setMargin(false);
		horizontalLayout_2.setSpacing(true);
		
		// btnAgregar
		btnAgregar = new Button();
		btnAgregar.setCaption("Grabar");
		btnAgregar.setImmediate(true);
		btnAgregar.setWidth("-1px");
		btnAgregar.setHeight("-1px");
		horizontalLayout_2.addComponent(btnAgregar);
		horizontalLayout_2.setComponentAlignment(btnAgregar, new Alignment(6));
		
		// btnCancelar
		btnCancelar = new Button();
		btnCancelar.setCaption("Cancelar");
		btnCancelar.setImmediate(true);
		btnCancelar.setWidth("-1px");
		btnCancelar.setHeight("-1px");
		horizontalLayout_2.addComponent(btnCancelar);
		
		return horizontalLayout_2;
	}

}
